package br.ufc.apsoo.controllers;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.ufc.apsoo.models.Usuario;
import br.ufc.apsoo.repositories.TodosUsuarios;
import br.ufc.apsoo.session.UsuarioSession;

@Resource
public class LoginController {

	private Result result;
	private TodosUsuarios todosUsuarios;
	private UsuarioSession usuarioSession;
	private Validator validator;

	public LoginController(Result result, TodosUsuarios todosUsuarios,
			UsuarioSession usuarioSession, Validator validator) {
		this.result = result;
		this.todosUsuarios = todosUsuarios;
		this.usuarioSession = usuarioSession;
		this.validator = validator;
	}

	@Get
	@Path("/login")
	public void login() {
	}

	@Post
	@Path("/login")
	public void login(Usuario usuario) {
		try {
			if (usuario.getLogin().isEmpty() || usuario.getSenha().isEmpty()) {
				validator.add(new ValidationMessage(
						"Login e senha obrigatórios!", "erro"));
			} else {
				Usuario user = todosUsuarios.login(usuario.getLogin(),
						usuario.getSenha());
				usuarioSession.setUsuario(user);
			}

			validator.onErrorUsePageOf(this).login();
			result.redirectTo(ReservaController.class).index();
		} catch (Exception e) {
			validator.add(new ValidationMessage("Usuário ou senha incorretos!",
					"erro"));
			validator.onErrorUsePageOf(this).login();
		}
	}

	@Get
	@Path("/logout")
	public void logout() {
		usuarioSession.setUsuario(null);
		result.redirectTo(this).login();
	}

}
